var express = require('express');
var router = express.Router();

const order = require("../sql/order")
const cart = require("../sql/cart")
const sql = require("../sql/sql")

const uuid = require("uuid")

const tools = require("../tools/index")

// 添加订单
// 修改订单（删除也只是修改状态）
// 查询订单


/**
* @apiGroup 订单
* @api {post} /api/order/add 添加订单
* @apiVersion 0.0.0
* @apiDescription 添加订单
* @apiParam {String} proData json格式的商品数据
* @apiParam {String} address json格式的地址数据
* @apiParam {String} state 订单状态
* @apiSuccess {number} code 请求状态
* @apiSuccess {string} msg 请求说明
* @apiSuccess {array} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    code:1,
    title:"添加订单成功",
    data:"NO DATA"
})
res.send({
    code: 400,
    title: "登录失效，请重新登录",
    data: err
})
* @apiSampleRequest http://localhost:3000/api/order/add
*/


// 添加订单
router.post('/add', function(req, res, next) {
    const token = req.headers.token;

    const proData = JSON.parse(req.body.proData);       // json字符
    const address = JSON.parse(req.body.address);
    const state = Number(req.body.state);

    tools.verify(token).then(result=>{
        // result.userId
        sql.add(order, {
            orderId: "orderid-" + uuid.v1(),
            userId: result.userId,
            proData: proData,
            address: address,
            state: state,
            time: Date.now()
        }).then(()=>{
            // 删除购物车集合中的对应的商品数据（更新购物车）
            sql.get(cart, {userId: result.userId}).then(data=>{
                // 将购物车中的商品数据临时保存
                const arr = data[0].proData
                // 遍历要加入订单的数据
                proData.forEach(val1=>{
                    let i=0;
                    // 遍历购物车中的数据
                    arr.some((val2,idx)=>{
                        // 将订单中的数据和购物车数据比对，保存索引
                        i = idx
                        return val2.proId === val1.proId
                    })
                    // 删除购物车中指定位置的数据
                    arr.splice(i,1)
                })
                // 将处理之后的临时数据更新到购物车
                sql.set(cart, {userId: result.userId}, {$set:{
                    proData:arr
                }}).then(()=>{
                    res.send({
                        code:1,
                        title:"订单添加成功",
                        data:"NOT DATA"
                    })
                })
            })
        })
    }).catch(err=>{
        res.send({
            code:400,
            title:"登录失效",
            data:err
        })
    })
});



/**
* @apiGroup 订单
* @api {post} /api/order/set 修改订单
* @apiVersion 0.0.0
* @apiDescription 修改订单
* @apiParam {String} orderId 订单id，必传
* @apiParam {String} address json格式的地址数据，可选
* @apiParam {Number} state 订单状态，可选
* @apiSuccess {number} code 请求状态
* @apiSuccess {string} msg 请求说明
* @apiSuccess {array} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    code:1,
    title:"修改订单成功",
    data:"NO DATA"
})
res.send({
    code: 400,
    title: "登录失效，请重新登录",
    data: err
})
* @apiSampleRequest http://localhost:3000/api/order/set
*/


// 修改订单：传地址，改地址，传状态，改状态，都传，都改
router.post('/set', function(req, res, next) {
    const token = req.headers.token;
    const orderId = req.body.orderId;

    tools.verify(token).then(result=>{
        sql.get(order, {orderId:orderId}).then(data=>{
            const address = req.body.address ? JSON.parse(req.body.address) : data[0].address;
            const state = req.body.state ? Number(req.body.state) : data[0].state;
            
            sql.set(order, {orderId}, {$set: {
                address, state
            }}).then(()=>{
                res.send({
                    code:1,
                    title:"修改成功",
                    data:"NOT DATA"
                })
            })
        })
    }).catch(err=>{
        res.send({
            code:400,
            title:"登录失效",
            data:err
        })
    })
})





/**
* @apiGroup 订单
* @api {get} /api/order/all  查询所有订单
* @apiVersion 0.0.0
* @apiDescription 查询所有订单
* @apiSuccess {number} code 请求状态
* @apiSuccess {string} msg 请求说明
* @apiSuccess {array} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    code:1,
    title:"查询成功",
    data:数据
})
res.send({
    code: 400,
    title: "登录失效，请重新登录",
    data: err
})
* @apiSampleRequest http://localhost:3000/api/order/all
*/

// 查询所有订单
router.get('/all', function(req, res, next) {
    const token = req.headers.token;

    tools.verify(token).then(result=>{
        sql.get(order, {userId: result.userId}).then(data=>{
            res.send({
                code:1,
                title:"查询成功",
                data:data
            })
        })
    }).catch(err=>{
        res.send({
            code:400,
            title:"登录失效",
            data:err
        })
    })
})


/**
* @apiGroup 订单
* @api {get} /api/order/one  查询订单详情
* @apiVersion 0.0.0
* @apiDescription 查询订单详情
* @apiParam {String} orderId 订单id
* @apiSuccess {number} code 请求状态
* @apiSuccess {string} msg 请求说明
* @apiSuccess {array} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    code:1,
    title:"查询成功",
    data:数据
})
res.send({
    code: 400,
    title: "登录失效，请重新登录",
    data: err
})
* @apiSampleRequest http://localhost:3000/api/order/one
*/

// 查询单个订单
router.get('/one', function(req, res, next) {
    const token = req.headers.token;
    const orderId = req.query.orderId;

    tools.verify(token).then(result=>{
        sql.get(order, {orderId}).then(data=>{
            res.send({
                code:1,
                title:"查询成功",
                data:data[0]
            })
        })
    }).catch(err=>{
        res.send({
            code:400,
            title:"登录失效",
            data:err
        })
    })
})



/**
* @apiGroup 订单
* @api {get} /api/order/search  搜索订单
* @apiVersion 0.0.0
* @apiDescription 搜索订单
* @apiParam {String} sKey 要搜索的商品名称关键字
* @apiSuccess {number} code 请求状态
* @apiSuccess {string} msg 请求说明
* @apiSuccess {array} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    code:1,
    title:"查询成功",
    data:数据
})
res.send({
    code: 400,
    title: "登录失效，请重新登录",
    data: err
})
* @apiSampleRequest http://localhost:3000/api/order/search
*/

// 查询指定商品所在的订单
router.get('/search', function(req, res, next) {
    const token = req.headers.token;
    const sKey = req.query.sKey;

    tools.verify(token).then(result=>{
        sql.get(order, {userId: result.userId}).then(data=>{
            // data                // [{订单},{订单},{订单}]
            // data[0]             // {id:,time:,proData:[]}
            // data[0].proData     // [{商品},{商品},{商品},]
            // data[0].proData[0]  // {id,proName}
            const arr = data.filter(val => {
                for(let i=0;i<val.proData.length;i++){
                    return val.proData[i].proName.includes(sKey)
                }
            });
            res.send({
                code:1,
                title:"查询成功",
                data:arr
            })
        })
    }).catch(err=>{
        res.send({
            code:400,
            title:"登录失效",
            data:err
        })
    })
})



module.exports = router;
